using System;
using System.IO;

namespace Game
{
    public interface IExternalContentProvider : IDisposable
    {
        string DisplayName
        {
            get;
        }

        bool SupportsLinks
        {
            get;
        }

        bool SupportsListing
        {
            get;
        }

        bool RequiresLogin
        {
            get;
        }

        bool IsLoggedIn
        {
            get;
        }

        string Description
        {
            get;
        }

        void Login(CancellableProgress progress, Action success, Action<Exception> failure);

        void Logout();

        void List(string path, CancellableProgress progress, Action<ExternalContentEntry> success, Action<Exception> failure);

        void Download(string path, CancellableProgress progress, Action<Stream> success, Action<Exception> failure);

        void Upload(string path, Stream stream, CancellableProgress progress, Action<string> success, Action<Exception> failure);

        void Link(string path, CancellableProgress progress, Action<string> success, Action<Exception> failure);
    }
}
